package com.yuyou.fn.educational.service.impl;

import com.github.wens.framework.service.impl.SuperServiceImpl;
import com.github.wens.mybatisplus.examples.Example;
import com.yuyou.fn.common.exception.BusException;
import com.yuyou.fn.common.util.TimeUtils;
import com.yuyou.fn.educational.entity.CourseClass;
import com.yuyou.fn.educational.entity.Questionnaire;
import com.yuyou.fn.educational.entity.QuestionnaireQuestion;
import com.yuyou.fn.educational.entity.QuestionnaireSetting;
import com.yuyou.fn.educational.mapper.QuestionnaireQuestionMapper;
import com.yuyou.fn.educational.service.ICourseClassService;
import com.yuyou.fn.educational.service.IQuestionnaireQuestionService;
import com.yuyou.fn.educational.service.IQuestionnaireService;
import com.yuyou.fn.educational.service.IQuestionnaireSettingService;
import com.yuyou.fn.educational.vo.NaireSettingQueryVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 *
 * QuestionnaireQuestion 表数据服务层接口实现类
 *
 */
@Service
public class QuestionnaireQuestionServiceImpl extends SuperServiceImpl<QuestionnaireQuestionMapper, QuestionnaireQuestion,Long> implements IQuestionnaireQuestionService {

    @Resource
    private IQuestionnaireService questionnaireService;

    @Resource
    private ICourseClassService courseClassService;

    @Resource
    private IQuestionnaireSettingService questionnaireSettingService;

    @Override
    @Transactional
    public void setUpListByQuestionnaireId(Long questionnaireId, List<QuestionnaireQuestion> questionnaireQuestionList) {
        if (questionnaireId==null){
            throw new NullPointerException();
        }
        this.deleteByQuestionnaireId(questionnaireId);
        Integer totalScore=0;
        Integer questionNum=0;
        if (questionnaireQuestionList!=null &&questionnaireQuestionList.size()>0){
            questionNum=questionnaireQuestionList.size();
            for (QuestionnaireQuestion questionnaireQuestion:questionnaireQuestionList){
                questionnaireQuestion.setQuestionnaireId(questionnaireId);
                questionnaireQuestion.setCreateTime(TimeUtils.now());
                questionnaireQuestion.setUpdateTime(TimeUtils.now());
                if (StringUtils.isEmpty(questionnaireQuestion.getContent())){
                    throw new BusException("编号为"+questionnaireQuestion.getQuestionnaireQuestionNo()+"的题目未设置内容");
                }
                if (questionnaireQuestion.getScore()==null){
                    throw new BusException("编号为"+questionnaireQuestion.getQuestionnaireQuestionNo()+"的题目未设置分数");
                }
                totalScore=totalScore+questionnaireQuestion.getScore();
            }
            this.insertBatch(questionnaireQuestionList);
        }
        Questionnaire questionnaire=new Questionnaire();
        questionnaire.setQuestionnaireId(questionnaireId);
        questionnaire.setQuestionNum(questionNum);
        questionnaire.setTotalScore(totalScore);
        questionnaireService.updateSelectiveById(questionnaire);
    }

    @Override
    public void deleteByQuestionnaireId(Long questionnaireId) {
        if (questionnaireId==null){
            throw new NullPointerException();
        }
        Example<QuestionnaireQuestion> example=QuestionnaireQuestion.createExample();
        example.createCriteria().andEqualTo("questionnaireId",questionnaireId);
        this.deleteByExample(example);
    }

    @Override
    public List<QuestionnaireQuestion> findListByQuestionnaireId(Long questionnaireId) {
        if (questionnaireId==null){
            throw new NullPointerException();
        }
        Example<QuestionnaireQuestion> example=QuestionnaireQuestion.createExample();
        example.createCriteria().andEqualTo("questionnaireId",questionnaireId);
        return this.findListByExample(example);
    }

    @Override
    public List<QuestionnaireQuestion> findListByClassId(Long classId) {
        CourseClass courseClass=courseClassService.findById(classId);
        NaireSettingQueryVo naireSettingQueryVo=new NaireSettingQueryVo();
        naireSettingQueryVo.setPeriodId(courseClass.getPeriodId());
        naireSettingQueryVo.setCampusId(courseClass.getCampusId());
        naireSettingQueryVo.setGradeId(courseClass.getGradeId());
        naireSettingQueryVo.setSubjectId(courseClass.getSubjectId());
        QuestionnaireSetting questionnaireSetting=questionnaireSettingService.findSettingByQueryVo(naireSettingQueryVo);
        if (questionnaireSetting==null || questionnaireSetting.getUseQuestionnaireId()==null){
            throw new BusException("该班级暂时未设置问卷，请前往设置");
        }

        return this.findListByQuestionnaireId(questionnaireSetting.getUseQuestionnaireId());
    }
}